MVCC(multi-version concurrency control)
このページはMySQL前提
明示的なロックが不要になる
クラスタインデックスのある行が更新される
インデックスの行にはロールバックポインタが記録されUNDOログを示す
さらに行データが更新されるとUNDOログに対比され再帰的に遡れるようになっている
DELETEの場合はUNDOログは生成される削除マーカーがつくのみ
UNDOレコードや削除マーカーがついた行はパージスレッドによりバックグラウンドで削除される
そのレコードを参照する必要のあるトランザクションがなければ削除できる
削除されていないUNDOログはHistry Listに保存されている
MVCCはノンロッキングリードでしか使われない
ロックしないのでロック競合は起こさず古いデータを読める
更新処理の場合最新のデータに対して行われなければならないし更新が終わるまでロックが必要
ロッキングリードではMVCCは使われない
プレミスを保証したければ明示的なselect for updateやselect lock in share modeなどが必要
ノンロッキングリード/ロッキングリードで読み取る値が変わると言うこと
ファントムを防ぐ=ある範囲でレコードが挿入されないことを保証する必要がある